#include "../inc/app_manger.h"


AppManger app_manger;






App::App(const char* name, app_main_t main, app_exit_t exit, const void* icon, lv_color_t bg_color)
{
  this->name = new std::string(name); // 动态分配内存存储应用程序名称
  this->app_main = main;
  this->app_exit = exit;
  this->icon = (void*) icon;
  this->bg_color = bg_color;
}

App::~App()
{
  if (this->name != NULL)
  {
    delete this->name;          // 释放应用程序名称的内存
  }
}

std::string* App::get_name()
{
  return this->name;
}


void* App::get_icon()
{
  return this->icon;
}


lv_color_t App::get_bg_color()
{
  return this->bg_color;
}


void App::run(void* data)
{
  printf("run app %s\n", this->name->c_str());
  this->app_main(data);
}

AppManger::AppManger()
{

}

AppManger::~AppManger()
{
}

// 安装一个新的应用程序
void AppManger::install(const char* name, app_main_t main, app_exit_t exit, const void* icon, lv_color_t bg_color)
{
  App* app = new App(name, main, exit, icon, bg_color); // 创建一个新的App对象
  this->app_list.push_back(app);                        // 将App对象添加到应用程序列表中

}



// 退出当前应用程序并显示主页面
void AppManger::app_exit()
{
  this->main_page->show();                              // 显示主页面
}
// 设置主页面
void AppManger::add_main_page(Page* page)
{
  this->main_page = page;                               // 设置主页面
}

// 获取应用程序列表
std::list<App*> AppManger::get_app_list()
{
  return this->app_list;
}
// 加载指定名称的应用程序
void AppManger::load_app(char* name)
{
  printf("load app %s\n", name);
  std::string* app_name = new std::string(name);
  App* app = NULL;
  // 遍历应用程序列表，查找匹配的应用程序
  for (std::list<App*>::iterator it = this->app_list.begin(); it != this->app_list.end(); it++)
  {
    printf("app name %s\n", (*it)->get_name()->c_str());
    if ((*it)->get_name()->compare(*app_name) == 0)         // 比较应用程序名称
    {
      printf("compare app %s\n", (*it)->get_name()->c_str());
      // (*it)->run(NULL);
      app = *it;          // 找到匹配的应用程序
    }
  }
  app->run(NULL);         // 运行找到的应用程序
  delete app_name;        // 释放动态分配的内存
}